'use strict'
var __createBinding =
  (this && this.__createBinding) ||
  (Object.create
    ? function(o, m, k, k2) {
        if (k2 === undefined) k2 = k
        Object.defineProperty(o, k2, {
          enumerable: true,
          get: function() {
            return m[k]
          },
        })
      }
    : function(o, m, k, k2) {
        if (k2 === undefined) k2 = k
        o[k2] = m[k]
      })
var __setModuleDefault =
  (this && this.__setModuleDefault) ||
  (Object.create
    ? function(o, v) {
        Object.defineProperty(o, 'default', { enumerable: true, value: v })
      }
    : function(o, v) {
        o['default'] = v
      })
var __importStar =
  (this && this.__importStar) ||
  function(mod) {
    if (mod && mod.__esModule) return mod
    var result = {}
    if (mod != null)
      for (var k in mod) if (k !== 'default' && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k)
    __setModuleDefault(result, mod)
    return result
  }
var __awaiter =
  (this && this.__awaiter) ||
  function(thisArg, _arguments, P, generator) {
    function adopt(value) {
      return value instanceof P
        ? value
        : new P(function(resolve) {
            resolve(value)
          })
    }
    return new (P || (P = Promise))(function(resolve, reject) {
      function fulfilled(value) {
        try {
          step(generator.next(value))
        } catch (e) {
          reject(e)
        }
      }
      function rejected(value) {
        try {
          step(generator['throw'](value))
        } catch (e) {
          reject(e)
        }
      }
      function step(result) {
        result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected)
      }
      step((generator = generator.apply(thisArg, _arguments || [])).next())
    })
  }
var __generator =
  (this && this.__generator) ||
  function(thisArg, body) {
    var _ = {
        label: 0,
        sent: function() {
          if (t[0] & 1) throw t[1]
          return t[1]
        },
        trys: [],
        ops: [],
      },
      f,
      y,
      t,
      g
    return (
      (g = { next: verb(0), throw: verb(1), return: verb(2) }),
      typeof Symbol === 'function' &&
        (g[Symbol.iterator] = function() {
          return this
        }),
      g
    )
    function verb(n) {
      return function(v) {
        return step([n, v])
      }
    }
    function step(op) {
      if (f) throw new TypeError('Generator is already executing.')
      while (_)
        try {
          if (
            ((f = 1),
            y &&
              (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) &&
              !(t = t.call(y, op[1])).done)
          )
            return t
          if (((y = 0), t)) op = [op[0] & 2, t.value]
          switch (op[0]) {
            case 0:
            case 1:
              t = op
              break
            case 4:
              _.label++
              return { value: op[1], done: false }
            case 5:
              _.label++
              y = op[1]
              op = [0]
              continue
            case 7:
              op = _.ops.pop()
              _.trys.pop()
              continue
            default:
              if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) {
                _ = 0
                continue
              }
              if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
                _.label = op[1]
                break
              }
              if (op[0] === 6 && _.label < t[1]) {
                _.label = t[1]
                t = op
                break
              }
              if (t && _.label < t[2]) {
                _.label = t[2]
                _.ops.push(op)
                break
              }
              if (t[2]) _.ops.pop()
              _.trys.pop()
              continue
          }
          op = body.call(thisArg, _)
        } catch (e) {
          op = [6, e]
          y = 0
        } finally {
          f = t = 0
        }
      if (op[0] & 5) throw op[1]
      return { value: op[0] ? op[1] : void 0, done: true }
    }
  }
var __importDefault =
  (this && this.__importDefault) ||
  function(mod) {
    return mod && mod.__esModule ? mod : { default: mod }
  }
Object.defineProperty(exports, '__esModule', { value: true })
exports.component = exports.generateWxss = exports.generateWxml = exports.generateJson = exports.generateJs = void 0
var utils_1 = __importDefault(require('./utils'))
var sysPath = __importStar(require('path'))
var jsTemplate =
  "\nComponent({\n    externalClasses: ['custom-class'],\n    properties: {\n        icon: {\n            type: String,\n            value: '',\n        },\n        size: {\n            type: Number,\n            value: 32,\n        },\n    },\n})\n"
var jsonTemplate = '\n{\n    "component": true\n}\n'
var wxmlTemplate = function(icon) {
  if (icon === void 0) {
    icon = 'tool-icon'
  }
  return (
    '\n<cover-view class="' +
    icon +
    ' ' +
    icon +
    '-{{icon}}" style="width: {{ size }}rpx;height:width: {{ size }}rpx;"></cover-view>\n'
  )
}
exports.generateJs = function(path) {
  return __awaiter(void 0, void 0, void 0, function() {
    var jsPath, mkJs
    return __generator(this, function(_a) {
      switch (_a.label) {
        case 0:
          jsPath = path + '/icon.js'
          return [4 /*yield*/, utils_1.default.mkFile(jsPath, jsTemplate)]
        case 1:
          mkJs = _a.sent()
          if (!mkJs) {
            throw new Error('\u5BF9\u4E0D\u8D77\uFF0C\u521B\u5EFA' + jsPath + '\u5931\u8D25')
          }
          return [2 /*return*/, jsPath]
      }
    })
  })
}
exports.generateJson = function(path) {
  return __awaiter(void 0, void 0, void 0, function() {
    var jsonPath, mkJs
    return __generator(this, function(_a) {
      switch (_a.label) {
        case 0:
          jsonPath = path + '/icon.json'
          return [4 /*yield*/, utils_1.default.mkFile(jsonPath, jsonTemplate)]
        case 1:
          mkJs = _a.sent()
          if (!mkJs) {
            throw new Error('\u5BF9\u4E0D\u8D77\uFF0C\u521B\u5EFA' + jsonPath + '\u5931\u8D25')
          }
          return [2 /*return*/, jsonPath]
      }
    })
  })
}
exports.generateWxml = function(path, icon) {
  if (icon === void 0) {
    icon = 'tool-icon'
  }
  return __awaiter(void 0, void 0, void 0, function() {
    var wxmlPath, mkJs
    return __generator(this, function(_a) {
      switch (_a.label) {
        case 0:
          wxmlPath = path + '/icon.wxml'
          return [4 /*yield*/, utils_1.default.mkFile(wxmlPath, wxmlTemplate(icon))]
        case 1:
          mkJs = _a.sent()
          if (!mkJs) {
            throw new Error('\u5BF9\u4E0D\u8D77\uFF0C\u521B\u5EFA' + wxmlPath + '\u5931\u8D25')
          }
          return [2 /*return*/, wxmlPath]
      }
    })
  })
}
exports.generateWxss = function(path, fileName) {
  return __awaiter(void 0, void 0, void 0, function() {
    var from, wxssPath
    return __generator(this, function(_a) {
      switch (_a.label) {
        case 0:
          from = sysPath.resolve(path, '../' + fileName + '.css')
          wxssPath = path + '/icon.wxss'
          return [4 /*yield*/, utils_1.default.copy(from, wxssPath)]
        case 1:
          _a.sent()
          return [2 /*return*/, wxssPath]
      }
    })
  })
}
exports.component = function(path, icon, fileName) {
  return __awaiter(void 0, void 0, void 0, function() {
    var files
    return __generator(this, function(_a) {
      switch (_a.label) {
        case 0:
          return [4 /*yield*/, utils_1.default.rmdir(path)]
        case 1:
          _a.sent()
          return [4 /*yield*/, utils_1.default.mkdir(path)]
        case 2:
          _a.sent()
          return [
            4 /*yield*/,
            Promise.all([
              exports.generateJs(path),
              exports.generateJson(path),
              exports.generateWxml(path, icon),
              exports.generateWxss(path, fileName),
            ]),
          ]
        case 3:
          files = _a.sent()
          return [2 /*return*/, files]
      }
    })
  })
}
exports.default = exports.component
